package org.xdq.原子操作;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class Test {

    private static int i;

    private static AtomicInteger atomicInteger = new AtomicInteger();//这是一个原子化的整型对象，其中包装了一个整数，该对象的方法都具有原子性


    private static int count;

    public static void main(String[] args) {

        List<Thread> list = new ArrayList<>();



        for(int k = 0;k<10;k++){
            list.add(new Thread(()->{
                for(int j=0;j<1000;j++){
                    i++;//i++非原子操作，注意：i = 9 是原子操作
                    atomicInteger.incrementAndGet();//类似于i++
                    // atomicInteger.getAndIncrement();//类似于++i
//                    atomicInteger.decrementAndGet();//类似--i
//                    atomicInteger.addAndGet(8);//类似于 i = i+8
//                    atomicInteger.getAndAdd(8); //类似于 s = i; i=i+8;
                }
            }));
        }

        list.forEach(t->{t.start();});

        new Thread(()->{

            while (true) {
                count=0;
                list.forEach(t->{
                    if(!t.isAlive()){
                        count++;
                    }
                });

                if(count == list.size()){
                    System.out.println("i="+i);
                    System.out.println("原子i="+atomicInteger.get());
                    break;
                }
            }

        }).start();



    }





}
